package com.cskaoyan.javase.oop1._6constructor;

/**
 *
 * 目前最复杂的赋值情况: 存在this调用其他构造器
 * 这时赋值的顺序又是怎样的呢?
 * 在这个案例中，我们发现Student双参构造器中，有使用this调用单参构造器，那么它们的执行顺序是：
 * 类加载不要忘记了。
 * 程序会先找到，Student的双参构造器，但是并不会执行，而是
 * 先跳转执行this构造器，但是this构造器中的代码，也不会立刻执行（因为构造器赋值一定最后执行），而是
 * 先从上到下执行成员变量的显示赋值，然后
 * 跳回执行this构造器代码
 * 最后执行双参构造器代码
 *
 *
 * @since 17:34
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        Student stu = new Student(18, "王冰冰");
        System.out.println(stu.age);
        System.out.println(stu.name);
        System.out.println(stu.a);

        System.out.println("-----------------------------");
        Student s = new Student();
    }
}

class Student {
    int age = 10;
    String name = "张三";
    double a = 100;

    public Student(int age) {
        // 2
        System.out.println("Student age");
        this.age = age;
    }

    public Student() {
        System.out.println("hello world!");
    }

    public Student(int age, String name) {
        // this在表示调用构造器时必须在第一行,所以this在表示调用构造器时,肯定是只能用一次
        this(age);
        // 1
        System.out.println("Student age,name");
        this.name = name;
    }
}